package com.sinosoft.ptas.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.sinosoft.ptas.control.dto.ReportDataToExcel;
import com.sinosoft.ptas.control.dto.ReportRemindData;
import com.sinosoft.ptas.control.dto.RetrieveReportData;
import com.sinosoft.ptas.entity.ReportEntity;
import com.sinosoft.ptas.entity.TargetsOfImplPhaseEntity;
/**
 * 整体审核表持久化接口定义
 * @author zhangxiaolong
 *
 */
public interface ReportEntityMapper {
	
	/**
	 * 整体审核表 --添加
	 * @param reportEntity
	 */
	public boolean createReport(ReportEntity reportEntity);
	
	/**
	 * 整体审核表 --删除
	 * @param id
	 */
	public boolean deleteReport(@Param("id")String id);
	
	/**
	 * 整体审核表 --修改(用于审核表中的审核结果的变化，对应的申报表中的评定结果和申报状态的改变，
	 * 其中保存和申报是原始状态，建议修改和申报完成是变化后的状态，其中申报表的id会重审核表中取出来)
	 * @param reportEntity 申报表的实体类
	 */
	public boolean updateReport(ReportEntity reportEntity);
	
	/**
	 * 更新规財司申报表信息
	 * @param reportEntity
	 * @return
	 */
	public boolean updateReportGcs(ReportEntity reportEntity);
	
	/**
	 * 整体审核表 --查询
	 * @param id
	 * @return ReportEntity
	 */
	public ReportEntity retrieveReportById(String id);
	
	/**
	 * 查询规財司申报信息
	 * @param id
	 * @return
	 */
	public ReportEntity retrieveGcsReportById(String id);
	
	/**
	 * 根据省区域编码和年份得到申报表并显示出对应的状态
	 * @param divisionCode 省区域编码
	 * @param year 年份
	 * @return
	 */
	public List<ReportEntity> retrieveReportByProvinceCodeAndYear(@Param("divisionCode")String divisionCode,@Param("year")String year);
	
	/**
	 * 根据 省区域编码和年份、本项目的申请第几次来确定一条申报表
	 * @param divisionCode 省区域代码
	 * @param year 年份
	 * @param applyTimes 本项目申请的次数（第几次）
	 * @return
	 */
	public ReportEntity retrieveReportByDivCodeAndYearAndStimes(String divisionCode,String year,String applyTimes);
	
	/**
	 * 整体审核表 --查询全部
	 * @return List<ReportEntity>
	 */
	public List<ReportEntity> retrieveReports();
	
	public List<ReportEntity> retrieveReport(RetrieveReportData reportDto);
	/**
	 * 查询申报表
	 * 此方法针对于规財司（规划财务司 Department of planning and Finance）
	 * @param reportDto
	 * @return
	 */
	public List<ReportEntity> retrieveReportForDOPAF(RetrieveReportData reportDto);
	
	/**
	 * 省级主管部门去重查询
	 * @return
	 */
	public  List<ReportEntity> distinctProvincialGovernment();
	
	/**
	 * 查询申报导出给Excal
	 * @param reportDto
	 * @return
	 */
	public List<ReportDataToExcel> retrieveReportForDOPAFToExcel(RetrieveReportData reportDto);
	
	/**
	 * 规財司查看总体目标
	 * @return
	 */
	public List<ReportEntity>   retrieveReportForDOPAF2(String divisionCode);
	/**
	 * 根据省区去编码查询申报表信息
	 * @param divisionCode
	 * @return 申报表实体集合
	 */
	public List<ReportEntity>  retrieveReportsByDIVISIONCODE(String divisionCode);
	
	/**
	 * 其他司和财政部查看申报表
	 * @return
	 */
	public List<ReportEntity> retrieveReportForOtherDepartment(RetrieveReportData retrieveReportData);
	
	/**
	 * 规財是参看省局默认指标参考值是否填完
	 * @param referValueFinshCount
	 * @return
	 */
	public List<ReportRemindData>  retrieveReportsForRemind(Integer referValueFinshCount);
	
	/**
	 * 依据实施期目标Id批量查询申报信息
	 * @param reportId
	 * @return
	 */
	public List<ReportEntity> retrieveBathReport(List<String> reportIds);
	
	/**
	 * 每个司局查出对应省局下的实施期目标
	 * @param reportId
	 * @param orgId
	 * @return
	 */
	public List<TargetsOfImplPhaseEntity> retrieveOtherDepartmentTargetPhaseByReportIdAndOrgId(@Param("reportId")String reportId,@Param("orgId")String orgId);
}
